package com.cart.models;

import com.cart.pojo.Product;
import com.cart.services.ProductRepository;
import com.cart.services.UserRepository;
import com.cart.services.UserRepositoryImpl;
import com.cart.utils.AdminFileUtil;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Scanner;
import java.util.UUID;

public class Admin extends User {

    public Admin(int id, String username, String password, String email, String phone, String registrationDate) {
        super(id, username, password, email, phone, "管理员", registrationDate, "0");
    }

    // 管理员功能：列出所有客户信息
    public List<User> listAllCustomers(UserRepository userRepository) {
        return userRepository.findAllCustomers();
    }

    // 管理员功能：重置客户密码
    public void resetCustomerPassword(UserRepository userRepository, int customerId) throws InvocationTargetException {
        String newPassword = generateRandomPassword();
        userRepository.updatePassword(customerId, User.md5Hash(newPassword));
        sendEmailToCustomer(customerId, newPassword);
    }

    // 生成随机密码
    private String generateRandomPassword() {
        return UUID.randomUUID().toString().substring(0, 10);
    }

    // 模拟发送邮件给客户
    private void sendEmailToCustomer(int customerId, String newPassword) throws InvocationTargetException {
        UserRepository userRepository = new UserRepositoryImpl();
        User customer = userRepository.findById(customerId); // 获取客户信息
        if (customer != null) {
            System.out.println("发送邮件至客户：" + customer.getEmail());
            System.out.println("新密码：" + newPassword);
        } else {
            System.out.println("客户未找到。");
        }
    }

    // 管理员功能：删除客户
    public void deleteCustomer(UserRepository userRepository, int customerId) {
        if (confirmDeletion()) {
            userRepository.delete(customerId);
        }
    }

    private boolean confirmDeletion() {
        System.out.println("删除后无法恢复，确认继续吗？(y/n)");
        Scanner scanner = new Scanner(System.in);
        return scanner.nextLine().equalsIgnoreCase("y");
    }

    // 管理员功能：列出所有商品
    public List<Product> listAllProducts(ProductRepository productRepository) {
        return productRepository.findAll();
    }

    // 管理员功能：删除商品
    public void deleteProduct(ProductRepository productRepository, int productId) {
        if (confirmDeletion()) {
            productRepository.delete(productId);
        }
    }

    // 管理员功能：查询客户信息
    public User searchCustomerById(UserRepository userRepository, int customerId) {
        return userRepository.findById(customerId);
    }

    // 修改管理员密码并保存到文件
    public void updateAdminPassword(String newPassword) {
        // MD5加密新密码
        String encryptedPassword = md5Hash(newPassword);
        this.setPassword(encryptedPassword);  // 更新内存中的密码

        // 更新后的管理员信息写入文件
        AdminFileUtil.writeAdminToFile(this);  // 保存最新的管理员信息到文件
        System.out.println("管理员密码已更新并保存到文件！");
    }
}
